﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Net;


namespace Scope8
{
    /// <summary>
    /// Eine leere Seite, die eigenständig verwendet werden kann oder auf die innerhalb eines Rahmens navigiert werden kann.
    /// Dient dazu, um die Slides der Server zu laden. In der App.xaml.cs dürfen keine Aktionen andauern, die länger als 8 Sekunden anhalten.
    /// </summary>
    public sealed partial class Start : Page
    {
        /// <summary>
        /// Konstruktor der Klasse
        /// </summary>
        public Start()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// Wird aufgerufen, wenn diese Seite in einem Rahmen angezeigt werden soll.
        /// </summary>
        /// <param name="e">Ereignisdaten, die beschreiben, wie diese Seite erreicht wurde. Die
        /// Parametereigenschaft wird normalerweise zum Konfigurieren der Seite verwendet.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            startParsing();
        }


        /// <summary>
        /// Startet den Parsingvorgang auf Charite und Aperio
        /// </summary>
        private async void startParsing()
        {
            Boolean allok = true;
            try
            {
                ChariteImageServer chariteImageserver = new ChariteImageServer();
                List<Slide> lisfOfchariteSlides = await chariteImageserver.getAvaiableSlides();
                chariteImageserver.addToStaticList(lisfOfchariteSlides);

                AperioImageServer aperioImageServer = new AperioImageServer();
                List<Slide> listOfAperioSlides = await aperioImageServer.getAvaiableSlides();
                aperioImageServer.addToStaticList(listOfAperioSlides);
            }
            catch (WebException)
            {
                allok = false;
                progressBarXml.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                Message.Text = "Connection error, check your networkstatus.";
                TryAgain.Visibility = Windows.UI.Xaml.Visibility.Visible;
            }

            if (allok)
            {
                this.Frame.Navigate(typeof(ServerSelectPage), "AllGroups");
            }
        }

        /// <summary>
        /// Bei Verbindungsfehler kann der Parsingvorgang neu gestartet werden
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TryAgain_Click(object sender, RoutedEventArgs e)
        {
            TryAgain.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
            progressBarXml.Visibility = Windows.UI.Xaml.Visibility.Visible;
            Message.Text = "Connecting to server..";
            startParsing();
        }
    }
}
